package br.com.mkmts.view.controller.menu.pedidos.utils;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.mkmts.dto.PedidoDTO;
import br.com.mkmts.dto.PercentDescontoEnum;
import br.com.mkmts.dto.ProdutoDTO;
import br.com.mkmts.view.utils.CalculadoraUtils;

public class EstoqueCalcUtils extends CalculadoraUtils{

	public static Integer calcularPontosTotalPedido(List<ProdutoDTO> lista){
		Integer result = 0;
		for (int i = 0; i < lista.size(); i++) 
			result += lista.get(i).getQtdeTotalPontosProdutoCarrinho();
		
		return result;
	}
	public static Map<String, BigDecimal> calcularValorTotalPedido(List<PedidoDTO> lista){
		BigDecimal vlrTotalRevenda = BigDecimal.ZERO;
		BigDecimal vlrTotalAtacado = BigDecimal.ZERO;
		Map<String, BigDecimal> vlrTotalAndVlrAtacado = new HashMap<String, BigDecimal>();
		for (int i = 0; i < lista.size(); i++){
			vlrTotalRevenda = vlrTotalRevenda.add(lista.get(i).getValorTotalEmProdutos());
			vlrTotalAtacado = vlrTotalAtacado.add(lista.get(i).getValorTotalAtacado());
		}
		vlrTotalAndVlrAtacado.put("vlrTotalRevenda", vlrTotalRevenda);
		vlrTotalAndVlrAtacado.put("vlrTotalAtacado", vlrTotalAtacado);
		return vlrTotalAndVlrAtacado;
	}
	public static BigDecimal calcularValorTotalEmProdutos(List<ProdutoDTO> lista){
		BigDecimal result = BigDecimal.ZERO;
		for (int i = 0; i < lista.size(); i++) 
			result = result.add(lista.get(i).getValorTotalProdutoCarrinho());
		
		return result;
	}

	public static Integer calcularPorcDescontoPedido(BigDecimal valorTotalEmProdutos){
		Integer result = 0;
		if(valorTotalEmProdutos.compareTo(BigDecimal.valueOf(530)) != 1){
			result = PercentDescontoEnum._0.getCodigo();
		}else{
			if(valorTotalEmProdutos.compareTo(BigDecimal.valueOf(850)) != 1){
				result = PercentDescontoEnum._25.getCodigo();
			}else{
				if(valorTotalEmProdutos.compareTo(BigDecimal.valueOf(1340)) != 1){
					result = PercentDescontoEnum._30.getCodigo();
				}else{
					if(valorTotalEmProdutos.compareTo(BigDecimal.valueOf(2340)) != 1){
						result = PercentDescontoEnum._35.getCodigo();
					}else{
						result = PercentDescontoEnum._40.getCodigo();
					}
				}
			}
		}
		
		return result;
	}
	
	public static BigDecimal calcularValorTotalAtacado(BigDecimal valorTotal, Integer porcDesc){
		BigDecimal result = BigDecimal.ZERO;
		if(porcDesc > 0){
			result = valorTotal.divide(BigDecimal.valueOf(100)).multiply(BigDecimal.valueOf(100 - porcDesc));
		}else{
			result = valorTotal;
		}
		return result;
	}

	public static BigDecimal calcularValorFinalTotalPago(BigDecimal valorAtacado, BigDecimal valorFrete){
		BigDecimal result = BigDecimal.ZERO;
		valorFrete = valorFrete == null ? BigDecimal.ZERO : valorFrete;
		if(valorFrete.compareTo(BigDecimal.ZERO) == 1){
			result = valorAtacado.add(valorFrete);
		}else{
			result = valorAtacado;
		}
		
		return result;
	}
	
	public static BigDecimal calcularLucroTotalPedido(BigDecimal valorTot, BigDecimal valorPago, BigDecimal valorFrete){
		BigDecimal result = BigDecimal.ZERO;
		result = valorTot.subtract(valorPago).subtract(valorFrete==null?BigDecimal.ZERO:valorFrete);
		return result;
	}
	
	public static Integer calcularQtdeSaidaProdutoEstoque(Integer vlrAnterior, Integer vlrAtual){
		return vlrAnterior < vlrAtual ? 0 : (vlrAnterior - vlrAtual);
	
	}
	public static Integer calcularQtdeEntradaProdutoEstoque(Integer vlrAnterior, Integer vlrAtual){
		return vlrAnterior > vlrAtual ? 0 : (vlrAtual - vlrAnterior);
		
	}

	public static BigDecimal calcularValorDaMovimentacao(Integer vlrAnterior, Integer vlrAtual, BigDecimal vlrProduto){
		Integer entrada = calcularQtdeEntradaProdutoEstoque(vlrAnterior, vlrAtual);
		Integer saida = calcularQtdeSaidaProdutoEstoque(vlrAnterior, vlrAtual);
		BigDecimal returnzz = vlrProduto.multiply(BigDecimal.valueOf(entrada > 0 ? entrada : saida));
		
		return returnzz ;
		
	}
	
	
}
